﻿using ConfExpert.Forms.Base;
using ConfExpert.Forms.Depo.Aksesuar;
using ConfExpert.Properties;

using DevExpress.XtraEditors;
using DevTeam;

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace ConfExpert
{
    public partial class AksesuarSerileri : XForm
    {
        public AksesuarSerileri()
        {
            InitializeComponent();
        }

        BindingSource bs1, bs2; 
        private void AksesuarSerileri_Load(object sender, EventArgs e)
        {
            
            bs1 = gvAna.Init("GetAksSeriler");
            bs2 = gvAna.AddDetailGrid(gvDetay, "idx");

            gleAksesuar.Edit.Assign(RI(Rp.V_Aksesuar));

            gvDetay.AddColumn("A", typeof(int), "IIF(AksSeriId>0,1,0)");
            gvAna.AddColumn("SeriIdsiDolu", typeof(int), "SUM(Child({FK}).A)");
            gvAna.AddColumn("SeriIdsiBos", typeof(int), "ADET - SeriIdsiDolu");
            gvAna.FormatAsNumber(0, "ADET", "SeriIdsiDolu", "SeriIdsiBos");

            //System.Data.DataSet d = gvAna.Dataset();
            gvDetay.AddColumn("sel", typeof(int), "0");
            gvAna.AddColumn("sel", typeof(int), "MAX(Child({FK}).sel)");

            gvDetay.MakeColumnInvisible("A", "sel", "idx");
            gvAna.MakeColumnInvisible("sel", "idx");

            GridManager gm = GridManager.GetManager(gvDetay);
            gm.GridMenu.AddMenu("Toplu Göster", Buyut);
            gm.GridMenu.AddMenu("Seri Oluştur- tip1", SeriOlustur1);
            gm.GridMenu.AddMenu("Seri Oluştur- tip2", SeriOlustur2);
            gm.GridMenu.AddMenu("Seriyi Düzenle", SeriyiDuzenle);
            gm.GridMenu.AddMenu("Seriye Ekle", SeriyiGenislet, Resources.Plus_16x16);
            gm.GridMenu.AddMenu("Seriden Çıkar", SeridenCikar, Resources.Minus_16x16);

            btnSil.ItemClick += btnSil_ItemClick;
            gleAksesuar.EditValueChanged += gleAksesuar_EditValueChanged;  
            teSeriId.EditValueChanged += teSeriId_EditValueChanged;

            splitContainerControl2.AutoSize();
            gvAna.MakeReadOnly();
            gvDetay.MakeReadOnly();

            gvAna.MakeRowSelectable();
            gvAna.AddSummary("ADET", "SeriIdsiDolu", "SeriIdsiBos");
            gvDetay.AddSummary();
            //gvAna.ActiveFilterString = "[SeriIdsiBos]>0";
            gvAna.BestFitColumns();
            gvDetay.BestFitColumns();
        }

        void gleAksesuar_EditValueChanged(object sender, EventArgs e)
        {
            gleAksesuarChanged();
        }

        void btnSil_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            teSeriId.EditValue = string.Empty;
            gleAksesuar.EditValue = null;
            gleAksesuarChanged();
        }

        private void Buyut(object sender, EventArgs e)
        {
            string idxs = gvDetay.GetSelectedValues("AksesuarId");
            using (Resimler rs = new Resimler(idxs))
                rs.ShowDialog();
        }


        bool flg = false;
        void teSeriId_EditValueChanged(object sender, EventArgs e)
        {
            if (!flg)
            {
                flg = true;
                bs1.Filter = string.Empty;
                gleAksesuar.EditValue = null;

                if (teSeriId.EditValue.ToStr() != string.Empty)
                {
                    int SeriId = intParse(teSeriId.EditValue);
                    string expression = "Iif(AksSeriId = " + SeriId.ToString() + ", 1, 0)";
                    gvDetay.ChangeExpression("sel", expression);
                    bs1.Filter = "sel > 0";
                }
                gvAna.BestFitColumns();
                gvDetay.BestFitColumns();
                flg = false;
            }
        }

        private void gleAksesuarChanged()
        {
            if (!flg)
            {
                flg = true;
                bs1.Filter = string.Empty;
                teSeriId.EditValue = string.Empty;

                if (gleAksesuar.EditValue != null)
                {
                    int AksesuarId = intParse(gleAksesuar.EditValue);
                    string expression = "Iif(AksesuarId = " + AksesuarId.ToString() + ", 1, 0)";
                    gvDetay.ChangeExpression("sel", expression);
                    bs1.Filter = "sel > 0";
                }
                gvAna.BestFitColumns();
                gvDetay.BestFitColumns();
                flg = false;
            }
        }


        private void SeriOlustur1(object sender, EventArgs e)
        {
            if (GetTipNull())
            {
                int FRH = gvAna.FocusedRowHandle;
                gvAna.RefreshDataSource("InsAksSeriler", 1, GetAksesuarIds());
                gvAna.MakeRowVisible(FRH);
                gvAna.FocusedRowHandle = FRH;

                using (AksesuarSeri aseri = new AksesuarSeri((int)gvAna.Dataset().Tables[2].Rows[0][0]))
                    aseri.ShowDialog();
            }
            else
                XtraMessageBox.Show("Seçili aksesuarların tamamının SeriId'si boş olmalıdır.");
        }

        private void SeriOlustur2(object sender, EventArgs e)
        {
            if (GetTipNull())
            {
                int FRH = gvAna.FocusedRowHandle;
                gvAna.RefreshDataSource("InsAksSeriler", 2, GetAksesuarIds());
                gvAna.MakeRowVisible(FRH);
                gvAna.FocusedRowHandle = FRH;

                using (AksesuarSeriTip2 aseri = new AksesuarSeriTip2((int)gvAna.Dataset().Tables[2].Rows[0][0]))
                    aseri.ShowDialog();
            }
            else
                XtraMessageBox.Show("Seçili aksesuarların tamamının SeriId'si boş olmalıdır.");
        }

        private void SeriyiDuzenle(object sender, EventArgs e)
        {
            int AksSeriId = intParse(gvDetay.GetFocusedRowCellValue("AksSeriId"));
            if (AksSeriId > 0)
                switch (intParse(gvDetay.GetFocusedRowCellValue("Tip")))    //ÖNEMLİ!
                {
                    case 1:
                        using (AksesuarSeri aseri = new AksesuarSeri(AksSeriId))
                            aseri.ShowDialog();
                        break;

                    case 2:
                        using (AksesuarSeriTip2 aseritip2 = new AksesuarSeriTip2(AksSeriId))
                            aseritip2.ShowDialog();
                        break;
                }
        }

        private void SeridenCikar(object sender, EventArgs e)
        {
            int FRH = gvAna.FocusedRowHandle;
            gvAna.RefreshDataSource("DelAksSeriler", GetAksesuarIds());
            gvAna.MakeRowVisible(FRH);
            gvAna.FocusedRowHandle = FRH;
        }

        private void SeriyiGenislet(object sender, EventArgs e)
        {
            if (GetTip1())
            {
                int FRH = gvAna.FocusedRowHandle;
                gvAna.RefreshDataSource("ExtendAksSeriler", GetAksesuarIds());
                gvAna.MakeRowVisible(FRH);
                gvAna.FocusedRowHandle = FRH;

                using (AksesuarSeri aseri = new AksesuarSeri((int)gvAna.Dataset().Tables[2].Rows[0][0]))
                    aseri.ShowDialog();
            }
            else
                XtraMessageBox.Show("Ekleme, Tip1 seriler içindir. Bir seriye ait olan ve olmayan en az birer eleman seçmelisiniz.");
        }

        private string GetAksesuarIds()
        {
            string idxs = string.Empty;
            foreach (int rowHandle in gvDetay.GetSelectedRows())
                if (rowHandle > -1)
                    idxs += gvDetay.GetRowCellValue(rowHandle, "AksesuarId").ToString() + ",";

            if (idxs.Substring(idxs.Length - 1, 1) == ",")
                idxs = idxs.Substring(0, idxs.Length - 1);
            return idxs;
        }

        private bool GetTip1()
        {
            List<int> lst = new List<int>();
            bool tip1 = false, tip2 = false;
            foreach (int rowHandle in gvDetay.GetSelectedRows())
                if (rowHandle > -1)
                {
                    tip1 |= intParse(gvDetay.GetRowCellValue(rowHandle, "Tip")) == 1;
                    tip2 |= intParse(gvDetay.GetRowCellValue(rowHandle, "Tip")) == 2;
                    
                    int AksSeriId = intParse(gvDetay.GetRowCellValue(rowHandle, "AksSeriId"));
                    if (AksSeriId > 0)
                        if (!lst.Contains(AksSeriId))
                            lst.Add(AksSeriId);                
                }

            return tip1 && !tip2 && lst.Count == 1;
        }

        private bool GetTipNull()
        {
            bool tipNull = false;
            foreach (int rowHandle in gvDetay.GetSelectedRows())
                if (rowHandle > -1)
                    tipNull |= intParse(gvDetay.GetRowCellValue(rowHandle, "Tip")) == 0;

            return tipNull;
        }

        private void btnGüncell_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            gvAna.RefreshDataSource("GetAksSeriler");
            gvAna.BestFitColumns();
        } 
    }
}
